Generally, it is desirable for an internal combustion engine to determine a spark advance parameter based on an estimate of cylinder air charge. The spark advance parameter generally represents the angle of the crankshaft at which the spark is fired in the combustion chamber. By accurately determining and using the spark advance parameter, fuel economy can be increased and engine spark knock can be avoided.
Traditional methods of determining the spark advance parameter are performed according to a control strategy executed by an electronic controller. The electronic controller, including a processor and a memory, typically utilizes outputs from a number of sensors, including a mass airflow sensor, while performing the control strategy.
The prior art teaches many methods and systems for controlling the spark timing of an internal combustion engine. For example, U.S. Pat. Nos. 4,116,173, 4,809,662 and 5,133,322 issued to McDougal et al., disclose various methods and systems for controlling the spark advance of selected cylinders of a multicylinder engine so that the spark of selected cylinders is advanced beyond others of the cylinders. One use of these inventions is to control the spark advance of the cylinders to provide differing advances for the respective cylinders to accommodate differences in operational conditions at the cylinders.
U.S. Pat. No. 5,253,623 issued to Melnyk et al., discloses a method of controlling combustion engine timing. That method provides for maintaining the speed of a spark-ignited internal combustion engine operating at a desired idle speed to compensate for engine speed variations caused by torque disturbances. The final spark advance value is determined based on a non-linear relationship between spark advance and torque ratio.
The prior art control strategies typically employ an open loop architecture with two levels of computations: a foreground loop and a background loop. The foreground loop is executed at regular intervals prior to ignition. Due to the limited time for execution, the foreground loop is typically reserved for efficient and time critical calculations. The background loop performs all other calculations related to ignition timing.